import Vue from 'vue'
import Vuex,{createLogger} from 'vuex'
import { createVuexPersistedState } from "vue-persistedstate";
import axios from "axios"
import {Toast} from "vant"

Vue.use(Vuex)

export default new Vuex.Store({
  plugins:[ 
    new createLogger(),
    createVuexPersistedState(
      // {
      //   key:'vuex',
      //   storage:window.localStorage,
      //   blackList: ['arr'], //黑名单，放入里面的数据不缓存
      // }
     
     
    ),
  
  ],
  state: {
    quanxuan:false,
    arr:[], // 渲染列表的数组
    detailarr:{},// 详情页的数据，
    shoparr:[], // 购物车数组
    addressarr:[ // 放地址管理的数据
      {
        id: '1',
        name: '张三',
        tel: '13000000000',
        address: '浙江省杭州市西湖区文三路 138 号东方通信大厦 7 楼 501 室',
        isDefault: true,
      }
    ]
  },
  getters: {
  },
  mutations: {
    setarr (state,{payload,ispull}) {
       if (ispull ) { // 上拉加载
          state.arr = [...state.arr,...payload]
       } else { // 下拉刷新
         state.arr = payload
       }
       
    },
    addshop (state,payload) { // 加入购物车的方法
       let findindex =  state.shoparr.findIndex((item,index)=>{ // 寻找当前元素出现在数组里的下标，如果找到了，返回下标，找不到，返回 -1 
         return item.id === payload.id
       })
       if (findindex === -1 ) {
          state.shoparr.push(payload)
       } else {
          Toast.success("您已经添加过了")
       }
      

    },
    delfn (state,payload) { // 删除地址的方法
      state.addressarr.splice(eval(payload.index),1)
    },
    addNum (state,payload) { // 购物车++
        state.shoparr.forEach((item,index)=>{
          if (item.id === payload) {
            item.num ++
          }
        })

    },
    subTract (state,payload) { // 购物车--
      state.shoparr.forEach((item,index)=>{
        if (item.id === payload) {
          item.num --
           if ( item.num <= 1) {
             item.num = 1
              Toast.success("您不能再减去了")
           }
        }
      })
    },
    filterDetail (state,payload) {
    
       state.detailarr = state.arr.find((item)=>item.id === payload) // find 从一个数组里寻找第一个符合条件的元素
    },
    changeallfn (state,payload) { // 全选的方法
       state.shoparr.forEach((item)=>{
         item.checked = payload
       })

    },
    cheekitem (state,payload) {
        //  if ( !(state.shoparr.filter(item=>item.checked).length === 1)) {
          state.quanxuan = payload
        //  }  
       
    },
    addressfn (state,payload) {
        state.addressarr.push(payload)
    },
    addresseditfn (state,payload) {
        console.log(payload.index);
       // eval 是字符串的一个方法，他可以将字符串转化为真正的值
      state.addressarr.splice(eval(payload.index),1,payload)
       // eval("222")
    }
    // fanxuan (state) {
    //   state.quanxuan = state.shoparr.every(item=>item.checked)
    // }
  },
  actions: {
    getlist ({commit,state},payload) {
       console.log(payload);
       axios.get("/api/shoplist").then(res=>{
         commit({
          type:"setarr",
          payload:res.data,
          ispull:payload
        })
       })
       
    }
  },
  modules: {
  }
})
